package com.alphagen.sample.bestroute.utils;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;

import org.json.JSONArray;

import com.itextpdf.text.io.RandomAccessSourceFactory;
import com.itextpdf.text.pdf.PRTokeniser;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.RandomAccessFileOrArray;
import com.itextpdf.text.pdf.parser.PdfReaderContentParser;
import com.itextpdf.text.pdf.parser.SimpleTextExtractionStrategy;
import com.itextpdf.text.pdf.parser.TextExtractionStrategy;

public class PDFReader {

	public void parsePdf(String src, String dest) throws IOException {
	        PdfReader reader = new PdfReader(src);
	        // we can inspect the syntax of the imported page
	        byte[] streamBytes = reader.getPageContent(1);
	        PRTokeniser tokenizer = new PRTokeniser(new RandomAccessFileOrArray(new RandomAccessSourceFactory().createSource(streamBytes)));
	        PrintWriter out = new PrintWriter(new FileOutputStream(dest));
	        while (tokenizer.nextToken()) {
	            if (tokenizer.getTokenType() == PRTokeniser.TokenType.STRING) {
	                out.println(tokenizer.getStringValue());
	            }
	        }
	        out.flush();
	        out.close();
	        reader.close();
	    }
	 
	    /**
	     * Extracts text from a PDF document.
	     * @param src  the original PDF document
	     * @param dest the resulting text file
	     * @throws IOException
	     */
	    public void extractText(String src, String dest) throws IOException {
	        /*PrintWriter out = new PrintWriter(new FileOutputStream(dest));
	        PdfReader reader = new PdfReader(src);
	        RenderListener listener = new MyTextRenderListener(out);
	        PdfContentStreamProcessor processor = new PdfContentStreamProcessor(listener);
	        PdfDictionary pageDic = reader.getPageN(1);
	        PdfDictionary resourcesDic = pageDic.getAsDict(PdfName.RESOURCES);
	        processor.processContent(ContentByteUtils.getContentBytesForPage(reader, 1), resourcesDic);
	        out.flush();
	        out.close();
	        reader.close();*/
	    	
	    	 PdfReader reader = new PdfReader(src);
	         PdfReaderContentParser parser = new PdfReaderContentParser(reader);
	         PrintWriter out = new PrintWriter(new FileOutputStream(dest));
	         TextExtractionStrategy strategy;
	         for (int i = 1; i <= reader.getNumberOfPages(); i++) {
	             strategy = parser.processContent(i, new SimpleTextExtractionStrategy());
	             out.println(strategy.getResultantText());
	             System.out.println(strategy.getResultantText());
	         }
	         out.flush();
	         out.close();
	         reader.close();
	    }
	    
	    public JSONArray convertPDFToJSON(InputStream src) throws IOException{
	    	PdfReader reader = new PdfReader(src);
	    	//JSONObject jsonObject = null; 
	    	JSONArray jsonArray = null;
	         PdfReaderContentParser parser = new PdfReaderContentParser(reader);
	         TextExtractionStrategy strategy;
	         for (int i = 1; i <= reader.getNumberOfPages(); i++) {
	             strategy = parser.processContent(i, new MyTextExtractionStrategy());
	             String resultantText = strategy.getResultantText();
	             if(resultantText != null){
	            	 System.out.println(resultantText);	 
	            	 jsonArray = new JSONArray(resultantText);
		             //jsonObject = new JSONObject(strategy.getResultantText());
		             System.out.println(strategy.getResultantText());	 
	             }
	         }
	         reader.close();
	         return jsonArray;
	    }
	    
	    public void convertPDFToJSON(String src, String dest) throws IOException{
	    	PdfReader reader = new PdfReader(src);
	         PdfReaderContentParser parser = new PdfReaderContentParser(reader);
	         PrintWriter out = new PrintWriter(new FileOutputStream(dest));
	         TextExtractionStrategy strategy;
	         for (int i = 1; i <= reader.getNumberOfPages(); i++) {
	             strategy = parser.processContent(i, new MyTextExtractionStrategy());
	             out.println(strategy.getResultantText());
	             System.out.println(strategy.getResultantText());
	         }
	         out.flush();
	         out.close();
	         reader.close();
	    }

}
